home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 September
/
CHIP Eylül 1998.iso
/
Slackwar
/
docs
/
Security-HOWTO
< prev
next >
Wrap
Text File
|
1997-03-05
|
55KB
|
1,205 lines
Linux Security HOWTO
Kevin Fenzi, kevin@scrye.com
v0.9.5, 1 March 1998
This document is a general overview of security issues that face the
administrator of linux systems. It covers general security philosophy
and a number of specific examples of how to better secure your linux
system from intruders. Also included are pointers to security related
material and programs. NOTE: This is a beta version of this document.
Improvements, constructive criticism, additions and corrections are
gratefully excepted. Due to my despam filter, you will need to mail
me to get a despam key to mail me. Sorry for the trouble. To avoid
this make sure you have "linux", "security" or "HOWTO" in the subject
line of your mail.
1. Introduction
This document covers some of the main security issues that affect
linux security. General philosophy and net born resources are
discussed.
A number of other HOWTO documents overlap with security issues, and
those have been pointed to wherever appropriate.
This document is NOT meant to be a up to date exploits document. Large
numbers of new exploits happen all the time. This document will tell
you where to look for such up to date information, and some general
methods to prevent such exploits from taking place.
1.1. New versions of this document
New versions of this document will be periodically posted to
comp.os.linux.answers. They will also be added to the various
anonymous FTP sites who archive such information, including:
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
In addition, you should generally be able to find this document on the
Linux Worldwide Web home page via:
http://sunsite.unc.edu/mdw/linux.html
Finally, the very latest version of this document should also be
available in various formats from:
http://scrye.com/~kevin/lsh/
1.2. Feedback
All comments, error reports, additional information and criticism of
all sorts should be directed to:
kevin@scrye.com
NOTE: I use the despam filter to filter all my mail. This means that
if you are not known to me, your mail will bounce with a notice to re-
send with a provided "key" in the subject. I regret the trouble this
causes, but since I get 20-30 spam mails a day, I have to do
something. Please re-send your message with the "key" in the subject
and I will read your mail. You can also avoid this step by making sure
you put "linux" "security" or "HOWTO" in the subject of your mail.
http://scrye.com/~kevin/
1.3. Disclaimer
No liability for the contents of this documents can be accepted. Use
the concepts, examples and other content at your own risk.
Additionally, this is an early version, with many possibilities for
inaccuracies and errors.
A number of the examples and descriptions use the RedHat(tm) package
layout and system setup. Your mileage may vary.
As far as I know, only programs that under certain terms may be used
or evaluated for personal purposes will be described. Most of the
programs will be available complete with source under GNU-like terms.
1.4. Copyright information
This document is copyrighted (c)1998 Kevin Fenzi and distributed under
the following terms:
╖ Linux HOWTO documents may be reproduced and distributed in whole or
in part, in any medium physical or electronic, as long as this
copyright notice is retained on all copies. Commercial
redistribution is allowed and encouraged; however, the author would
like to be notified of any such distributions.
╖ All translations, derivative works, or aggregate works
incorporating any Linux HOWTO documents must be covered under this
copyright notice. That is, you may not produce a derivative work
from a HOWTO and impose additional restrictions on its
distribution. Exceptions to these rules may be granted under
certain conditions; please contact the Linux HOWTO coordinator at
the address given below.
╖ If you have questions, please contact Greg Hankins, the Linux HOWTO
coordinator, at
gregh@sunsite.unc.edu Finger for phone number and snail mail address.
2. Overview
This document will attempt to explain some procedures and commonly
used software to help your linux system be more secure.
The first thing to keep in mind is that there is never any such thing
as a "completely" secure computer system. All you can do is make it
increasingly difficult for someone to compromise your system. For the
average home linux user, not much is required to keep the causal
cracker at bay. For high profile linux users (banks,
telecommunications companies, etc) much more work is required.
Another factor to take into account is that the more you increase your
system security, the more intrusive your security becomes. You need to
decide where in this balancing act your system is still usable and yet
secure for your purposes. For instance, you could require everyone
dialing into your system to use a call back modem to call them back at
their home number. This is more secure, but if someone is not at home,
it makes it difficult for them to login. You could also setup your
linux system with no network or connection to the Internet, but this
makes it harder to surf the web. If you are a large to medium sized
site, you should establish a "Security Policy" stating how much
security is required by your site and what auditing is in place to
check it.
This document has been segregated into several sections. They cover
several broad kinds of security issues. The first, physical security,
covers how you need to protect your physical machine from tampering.
The second describes how to protect your system from tampering by
local users. The third, network security, describes how to better
secure your linux system from network attacks. The next discusses what
to do when you detect a system compromise in progress or detect one
that has recently happened. Then links to other security resources are
enumerated, and finally a few closing words.
The two main points to realize when reading this document are:
╖ Be aware of your system. Check system logs such as
/var/log/messages and keep an eye on your system, and
╖ Two, keep your system up to date by making sure you have installed
the current versions of software and have upgraded per security
alerts. Just doing this will help make your system markedly more
secure.
3. Physical Security
The first "layer" of security you need to take into account is the
physical security of your computer systems. Who has direct physical
access to your machine? Should they? Can you protect your machine from
their tampering? Should you?
How much physical security you need on your system is very dependent
on your situation, and/or budget.
If you are a home user, you probably don't need a lot (although you
might need to protect your machine from tampering by children or
annoying relatives). If you are in a Lab environment, you need
considerably more, but users will still need to be able to get work
done on the machines. Many of the following sections will help out. If
you are in a Office, you may or may not need to secure your machine
off hours or while you are away. At some companies, leaving your
console unsecured is a termination offense.
Obvious physical security methods such as locks on doors, cables,
locked cabinets, and video survailance are all a good idea, but beyond
the scope of this document. :)
3.1. Computer locks
Many more modern pc cases include a "locking" feature. Usually this
will be a socket on the front of the case that allows you to turn an
included key to a locked or unlocked position. Case locks can help
prevent someone from stealing your pc, or opening up the case and
directly manipulating/stealing your hardware. They can also sometimes
prevent someone from rebooting your computer on their own floppy or
other hardware.
These case locks do different things according to the support in the
motherboard and how the case is constructed. On many pc's they make it
so you have to break the case to get the case open. On some others
they make it so that it will not let you plug in new keyboards and
mice. Check your motherboard or case instructions for more
information. This can sometimes be a very useful feature, even though
the locks are usually very low quality and can easily be defeated by
attackers with locksmithing.
Some cases (most notably sparcs and macs) have a dongle on the back
that if you put a cable through attackers would have to cut the cable
or break the case to get into it. Just putting a padlock or combo lock
through these can be a good deterrent to someone stealing your
machine.
3.2. BIOS Security
The BIOS is the lowest level of software that configures or
manipulates your x86 based hardware. LILO and other linux boot methods
access the BIOS to determine how to boot up your linux machine. Other
hardware that linux runs on has similar software (OpenFirmware on macs
and new suns, sun boot prom, etc...). You can use your BIOS to prevent
attackers from rebooting your machine and manipulating your linux
system.
Under linux/x86 many pc bioses let you set a boot password. This
doesn't provide all that much security (bios can be reset, or removed
if someone can get into the case), but might be a good deterant (ie it
will take time and leave traces of tampering).
Many x86 bioses also allow you to specify various other good security
settings. Check your bios manual or look at it the next time you boot
up. Some examples are: disallow booting from floppy drives and
passwords to access some bios features.
On Linux/Sparc, your SPARC eeprom can be set to require a boot-up
password. This might slow attackers down.
NOTE: If you have a server machine, and you setup a boot password,
your machine will not boot up unattended. Keep in mind that you will
need to come in and supply the password in the even of a power
failure. ;(
3.3. Boot loader Security
The various linux boot loaders also can have a boot password set.
Using lilo take a look at the "restricted" and "password" settings.
"password" allows you to set a bootup password. "restricted" will let
the machine boot _unless_ someone specifies options at the lilo:
prompt (like 'single').
Keep in mind when setting all these passwords that you need to
remember them. :) Also remember that these passwords will mearly slow
the determined attacker.
If anyone has security related information from a different boot
loader, I would love to hear it. (grub, silo, milo, linload, etc).
NOTE: If you have a server machine, and you setup a boot password,
your machine will not boot up unattended. Keep in mind that you will
need to come in and supply the password in the even of a power
failure. ;(
3.4. xlock and vlock
If you wander away from your machine from time to time, it is nice to
be able to "lock" your console so that no one tampers with or looks at
your work. Two programs that do this are: xlock and vlock.
Xlock is a X display locker. It should be included in any linux
distributions that support X. Check out the man page for it for more
options, but in general you can run xlock from any xterm on your
console and it will lock the display and require your password to
unlock.
vlock is a simple little program that allows you to lock some or all
of the virtual consoles on your linux box. You can lock just the one
you are working in or all of them. If you just lock one, others can
come in and use the console, they will just not be able to use your
vty until you unlock it. vlock ships with redhat linux, but your
mileage may vary.
Of course locking your console will prevent someone from tampering
with your work, but does not prevent them from rebooting your machine
or otherwise disrupting your work.
3.5. Detecting Physical Security compromises.
The first thing to always note is when your machine was rebooted.
Since linux is a robust and stable OS, the only times your machine
should reboot is when YOU take it down for OS upgrades, hardware
swapping, or the like. If your machine has rebooted without you doing
it, a trouble light should go on. Many of the ways that your machine
can be compromised require the intruder to reboot or power off your
machine.
Check for signs of tampering on the case and computer area. Although
many intruders clean traces of their presence out of logs, it's a good
idea to check through them all and note any discrepancy.
Some things to check for in your logs:
╖ Short or incomplete logs.
╖ Logs containing strange timestamps.
╖ Logs with incorrect permissions or ownership.
╖ Records of reboots or restarting of services.
╖ missing logs.
╖ su entries or logins from strange places.
Where to look for your log file will depend on your distribution. In
the standard redhat setup, you will want to look in /var/log/ and
check messages, mail.log, and others.
You might also want to configure your log-rotating script or daemon to
keep logs around longer so you have time to examine them. Take a look
at the 'logrotate' package un recent redhat distributions. Other
distributions likely have a similar process.
4. Local Security
The next thing to take a look at is the security in your system
against attacks from local users. Did I just say _local_ users? yes.
Getting access to a local user is one of the first things that system
intruders attempt. With lax local security, they can then "upgrade"
their normal user access to root access using a variety of bugs and
poorly setup local services. If you make sure your local security is
tight, then the intruder will have another hurdle to jump.
Local users can also cause a lot of havoc with your system even
(especially) if they really are who they say they are. Providing
accounts to people you don't know or have no contact information for
is a very bad idea.
Before changing permissions on any system files, make sure you
understand what you are doing. Never change permissions on a file
because it seems like the easy way to get things working. Always
determine why the file has that permission before changing it.
4.1. Creating new accounts
You should make sure and provide user accounts with only the minimal
requirements for the task. If you provide your son (age 10) with an
account, you might want them to only have access to a word processor
or drawing program, but be unable to rm everything.
Several good rules of thumb when allowing other people legitimate
access to your linux machine:
╖ Give them the minimal amount of privileges they need.
╖ Be aware when/where they login from, or should be logging in from.
╖ Make sure and remove their account when they no longer need the
access.
Many local user accounts that are used in security compromises are
ones that have not been used in months or years. Since no one is using
them they provide the ideal attack vehicle.
4.2. File Permissions
It's important to insure that your system files are not open for
casual editing by users and groups who shouldn't be doing such system
maintance.
A quick explanation of unix permissions:
Ownership - Which user(s) and group(s) retain(s) control of the
permission settings of the node and parent of the node
Permissions - Bits capable of being set or reset to allow certain
types of access to it.
Read:
╖ To be able to view contents of a file
╖ To be able to read a directory
Write:
╖ To be able to add to or change a file
╖ To be able to delete or move files in a directory
Execute:
╖ To be able to run a binary program
╖ To be able to search in a directory
You - The owner of the file
Group - The group you belong to
Everyone - Anyone on the system
Examples:
-rw-r--r-- 1 kevin users 114 Aug 28 1997 .zlogin
1st bit - directory? (no)
2nd bit - read by owner? (yes, by kevin)
3rd bit - write by owner? (yes, by kevin)
4th bit - execute by owner? (no)
5th bit - read by group? (yes, by users)
6th bit - write by group? (no)
7th bit - execute by group? (no)
8th bit - read by everyone? (yes, by everyone)
9th bit - write by everyone? (no)
10th bit - execute by everyone? (no)
drwxr-xr-x 3 kevin users 512 Sep 19 13:47 .public_html/
1st bit - directory? (yes, it contains many files)
2nd bit - read by owner? (yes, by kevin)
3rd bit - write by owner? (yes, by kevin)
4th bit - execute by owner? (yes, by kevin)
5th bit - read by group? (yes, by users
6th bit - write by group? (no)
7th bit - execute by group? (yes, by users)
8th bit - read by everyone? (yes, by everyone)
9th bit - write by everyone? (no)
10th bit - execute by everyone? (yes, by everyone)
System configuration files (usually in /etc) are usually mode 644
(-rw-r--r--), and owned by root. Depending on your sites security
requirements, you might adjust this. Never leave any system files
writable by a group or everyone.
4.3. Root security
Another common local user attacker is the admin of your linux box.
yes, you! ;) Remember that you should only use the root account for
very short specific tasks and should mostly run as a normal user.
Running as root all the time is a very very very bad idea. Just use
su or sudo to do those tasks you need to do.
Several tricks to avoid messing up your own box as root:
╖ When doing some complex command, try running it first in a non
destructive way...especially commands that use globbing: ie, you
are going to do a "rm foo*.bak", instead, first do: "ls foo*.bak"
and make sure you are going to delete the files you think you are.
Using echo in place of destructive commands also sometimes works.
╖ Some people find it helpfull to do a "touch /-i" on their systems.
This will make commands like: "rm -rf *" ask you if you really want
to delete all the files. (It does this by your shell resolving the
"-i" file first, and treating it as the -i option to rm.) This will
not help with rm statements with no * in them. ;(
╖ Only become root to do single specific tasks. If you find yourself
trying to figure out how to do something, go back to a normal user
shell until you are sure what needs to be done by root.
╖ Always be slow and deliberate running as root. Your actions could
affect a lot of things. Think before you type!
If you absolutely positively need to allow someone (hopefully very
trusted) to have superuser access to your machine, there are a few
tools that can help. Sudo allows users to use their password to access
a limited set of commands as root. This would allow you to, for
instance, let a user be able to eject and mount removable media on
your linux box, but have no other root privileges. sudo also keeps a
log of all sudo attempts and successes, allowing you to track down who
used what command to do what. For this reason sudo works well even in
places where a number of people have root access, but use sudo so you
can keep track of changes made.
4.4. Trojan Horses
A Trojan Horse is named after the fabled ploy in Homers great literary
work. The idea is that you put up a program or binary that sounds
great, and get other people to download it and run it as root. Then,
you can compromise their system while they are not paying attention.
While they think the binary they just pulled down does one thing (and
it might very well), it also compromises their security.
You should take care of what programs you install on your machine.
redhat provides md5 checksums and pgp signed rpm files so you can
verify you are installing the real thing. Other distributions have
similar methods. You should never run any binary you don't have the
source for or a well known binary as root! Few attackers are willing
to release source code to public scrutiny.
Although it can be complex, make sure you are getting the source for
some program from it's real distribution site. If the program is going
to run as root make sure either you or someone you trust has looked
over the source and verified it.
4.5. Password Security & Encryption
One of the most important security features used today are passwords.
It is important for both you and all your users to have secure,
unguessable passwords. Most of the more recent linux distributions
include 'passwd' programs that not allow you to set a easily guessable
password. Make sure your passwd program is up to date and has these
features.
In depth discussion of encryption is beyond the scope of this document
, but a introduction is in order. Encryption is very usefull, possibly
even nessessary in this day and age. There are all sorts of methods of
encrypting data, each with their own flaws and drabacks. Some of the
more common ones you should be aware of:
unix password encryption: Most unicies (and linux is no exception) use
the DES (Data Encryption Standard) to encrypt your passwords. This
encrypted password is then stored in (typically) /etc/passwd (or less
commonly) /etc/shadow. When you attempt to login, whatever you type in
is encrypted again and compaired with the entry in the passwd file. If
they match, it must be the same password and you are allowed access.
DES is a one-way encryption. DES is know to be pretty weak in these
days of fast computers. Brute force attacks, such as crack or John the
ripper (see below) can often guess passwords unless your password is
sufficently random. PAM modules (see below) allow you to use a
diffrent encryption routine with your passwords (MD5 or the like).
4.5.1. PAM - Pluggable Authentication Modules
Newer versions of the RedHat linux distribution ship with a thing
called "PAM". PAM allows you to change on the fly your authentication
methods and requirements. Without re-compiling any of your binaries.
Configuration of PAM is beyond the scope of this document, take a look
at the PAM web site for more information.
http://www.kernel.org/pub/linux/libs/pam/index.html
Just a few of the things you can do with PAM:
╖ Use a non DES encryption for your passwords. (Making them harder to
brute force decode.
╖ Set resource limits on all your users so they can't perform denial
of service attacks (number of processes, amount of memory, etc).
╖ Enable shadow passwords (see below) on the fly.
╖ allow specific users to login only at specific times from specific
places.
4.5.2. Shadow Passwords.
Shadow passwords are a means of keeping your encrypted password
information secret from normal users. Normally this encrypted password
is stored in your /etc/passwd file for all to read. They can then run
password guesser programs on it and attempt to determine what it is.
Shadow passwords save this information to a /etc/shadow file that only
privileged users can read. In order to run shadow passwords you need
to make sure all your utilities that need access to password
information are recompiled to support it. PAM (above) also allows you
to just plug in a shadow module and doesn't require re-compilation of
executables.
4.5.3. Crack and John the Ripper
If for some reason your passwd program is not enforcing non easily
guessable passwords, you might want to run a password cracking program
and make sure your users passwords are secure.
Password cracking programs work on a simple idea. They try every word
in the dictionary, and then variations on those words. They encrypt
each one and check it against your encrypted password. If they get a
match they are in.
There are a number of programs out there...the two most notable of
which are "Crack" and "John the Ripper"
http://www.false.com/security/john/index.html . They will take up a
lot of your cpu time, but you should be able to tell if an attacker
could get in using them by running them first yourself and notifying
users with weak passwords. Note that an attacker would have to use
some other hole first in order to get your passwd (unix /etc/passwd)
file, but these are more common than you might think.
4.6. Integrity Checking with Tripwire
Another very good way to detect local (and also network) attacks on
your system is to run an integrity checker like Tripwire. Tripwire
runs a number of checksums on all your important binaries and config
files and compares them against a database of former values. Thus, any
changes in the files will be flagged.
It's a good idea to install tripwire onto a floppy, and then
physically set the write protect on the floppy. This way intruders
can't tamper with tripwire itself or change the database. Once you
have tripwire setup, it's a good idea to run it once a day or so and
check to see if anything has changed.
You can even add a crontab entry to run tripwire from your floppy
every night and mail you the results in the morning. Something like:
# set mailto
MAILTO=kevin
# run tripwire
15 05 * * * root /usr/local/adm/tcheck/tripwire
will mail you a report each morning at 5:15am.
Tripwire can be a godsend to detecting intruders before you would
otherwise notice them. Since a lot of files change on the average
system, you have to be careful what is cracker activity and what is
your own doing.
4.7. CFS - Cryptographic File System and TCFS - transparent crypto¡
graphic File System.
CFS is a way of encrypting an entire file system and allow users to
store encrypted files on them. It uses a NFS server running on the
local machine. rpms are avail at http://www.replay.com/redhat/ and
more information on how it all works is at:
ftp://ftp.research.att.com/dist/mab/
TCFS improves on CFS, adding more integration with the file system, so
that it's transparent to any users using the file system that it's
encrypted. more information at: http://edu-gw.dia.unisa.it/tcfs/
4.8. X11, SVGA and display security.
4.8.1. X11
It's important for you to secure your graphical display to prevent
attackers from doing things like: grabbing your passwords as you type
them without you knowing it, reading documents or information you are
reading on your screen, or even using a hole to gain superuser access.
Running remote X applications over a network also can be fraught with
peril, allowing sniffers to see all your interaction with the remote
system.
X has a number of access control mechanisms. The simplest of them is
host based. You can use xhost to specify what hosts are allowed access
to your display. This is not very secure at all. If someone has access
to your machine they can xhost + their machine and get in easily.
Also, if you have to allow access from an untrusted machine, anyone
there can compromise your display.
When using xdm (x display manager) to login, you get a much better
access method: MIT-MAGIC-COOKIE-1. A 128bit cookie is generated and
stored in your .Xauthorty file. If you need to allow a remote machine
access to your display, you can use the xauth command and the
information in your .Xauthority file to provide only that connection
access.
You can also use ssh (see ssh, above) to allow secure X connections.
This has the advantage of also being transparent to the end user, and
means that no un-encrypted data flows across the network.
Take a look at the Xsecurity man page for more information on X
security. The safe bet is to use xdm to login to your console and then
use ssh to go to remote sites you wish to run X programs off of.
4.8.2. SVGA
SVGAlib programs are typically suid root in order to access all your
linux machines video hardware. This makes them very dangerous. If they
crash, you typically need to reboot your machine to get a usable
console back. Make sure any SVGA programs you are running are
authentic, and can at least be somewhat trusted. Even better, don't
run them at all.
4.8.3. GGI (Generic Graphics Interface project)
The linux GGI project is trying to solve several of the problems with
video interfaces on linux. GGI will move a small piece of the video
code into the linux kernel, and then control access to the video
system. This means GGI will be able to restore your console at any
time to a known good state. They will also allow a secure attention
key, so you can be sure that there is no Trojan horse login program
running on your console. http://synergy.caltech.edu/~ggi/
4.9. identd
identd is a small program that typically runs out of your inetd. It
keeps track of what user is running what tcp service, and then reports
this to whoever requests it.
Many people misunderstand the usefulness of identd, and so disable it
or block all off site requests for it. identd is not there to help out
remote sites. There is no way of knowing if the data you get from the
remote identd is correct or not. There is no authentication in identd
requests.
Why would you want to run it then? Because it helps _you_ out, and is
another data-point in tracking. If your identd is un compromised, then
you know it's telling remote sites the user-name or uid of people
using tcp services. If the admin at a remote site comes back to you
and tells you user so and so was trying to hack into their site, you
can easily take action against that user. If you are not running
identd, you will have to look at lots and lots of logs, figure out who
was on at the time, and in general take a lot more time to track down
the user.
The identd that ships with most distributions is more configurable
than many people think. You can disable identd for specific users
(they can make a .noident file), you can log all identd requests (I
recommend it), you can even have identd return a uid instead of a user
name or even NO-USER.
5. Network Security
Network security is becoming more and more important as people spend
more and more time connected. Compromising network security is often
much easier than physical or local, and is much more common.
There are a number of good tools to assist with network security, and
more and more of them are shipping with linux distributions.
5.1. Packet Sniffers
One of the most common ways intruders gain access to more systems on
your network is by employing a packet sniffer on a already compromised
host. This "sniffer" just listens on the Ethernet port for things like
"Password" and "Login" and "su" in the packet stream and then logs the
traffic after that. This way, attackers gain passwords for systems
they are not even attempting to break into. Clear text passwords are
very vulnerable to this attack.
EXAMPLE: host A has been compromised. Attacker installs a sniffer.
Sniffer picks up admin logging into host B from Host C. It gets the
admins personal password as they login to B. Then, the admin does a
'su' to fix a problem. They now have the root password for Host B.
Later the admin lets someone telnet from his account to host Z on
another site. Now the attacker has a password/login on host Z.
In this day and age, the attacker doesn't even need to compromise a
system to do this, they could also bring a laptop or pc into a
building and tap into your net.
Using ssh or other encrypted password methods thwarts this attack.
Things like APOP for pop accounts also prevents this attack. (Normal
pop logins are very vulnerable to this, as is anything that sends
clear text passwords over the wire.)
5.2. System services and tcp_wrappers
As soon as you put your linux system on ANY network the first thing to
look at is what services you need to offer. Services that you do not
need to offer should be disabled so that you have one less thing to
worry about and attackers have one less place to look for a hole.
There are a number of ways to disable services under linux. You can
look at your /etc/inetd.conf file and see what services are being
offered by your inetd. Disable any that you do not need by commenting
them out (# at the beginning of the line), and then sending your inetd
process a SIGHUP.
You can also remove (or comment out) services in your /etc/services
file. This will mean that local clients will also be unable to find
the service (ie, if you remove ftp, and try and ftp to a remote site
from that machine it will fail with an unknown service message). It's
usually not worth the trouble to remove services, since it provides no
additional security. If a local person wanted to use ftp even tho you
had commented it out, they would make their own client that use the
common ftp port and would still work fine.
If you know you are not going to use some particular package, you can
also delete it entirely. rpm -e under the redhat distribution will
erase an entire package. Under debian dpkg likely does the same thing.
You should check your /etc/rc.d/rcN.d, where N is your systems run
level and see if any of the servers started in that directory are not
needed. Simply remove the unneeded script(s) and they will not be
started on your next reboot. If you have BSD style rc files, you will
want to check /etc/rc* for programs you don't need.
Most linux distributions ship with tcp_wrappers "wrapping" all your
tcp services. A tcp_wrapper (tcpd) is invoked from inetd instead of
the real server. tcpd then checks the host that is requesting the
service and either launches the program or denies access from that
host. tcpd allows you to restrict access to your tcp services. You
should make a /etc/hosts.allow and add in only those hosts that need
to have access to your machines services. If you are a home dialup
user, I would suggest you deny ALL. tcpd also logs failed attempts to
access services, so this can give you an idea that you are under
attack. If you add new services, you should always tcp wrapper them if
they are tcp based.
5.3. SATAN , ISS, and other network scanners
There are a number of different software packages out there that do
port and service based scanning of machines or networks. SATAN and ISS
are two of the more well known ones. This software connects to the
target machine (or all the target machines on a network) on all the
ports it can, and tries to determine what service is running there.
Based on this information, you could find out the machine is
vulnerable to a specific exploit on that server.
SATAN (Security Administrators Tool for Analyzing Networks) is a port
scanner with a web interface. It can be configured to do light,
medium, or strong checks on a machine or a network of machines. It's a
good idea to get SATAN and scan your machine or network, and fix the
problems it finds. Make sure you get the copy of SATAN from sun-site
or a reputable FTP or web site. There was a Trojan copy of SATAN that
was distributed out on the net.
http://www.trouble.org/~zen/satan/satan.html
ISS (Internet Security Scanner) is another port based scanner. It is
faster than Satan, and thus might be better for large networks.
However, SATAN tends to provide more information.
Detecting Port scans.
There are some tools designed to alert you to probes by Satan and ISS
and other scanning software, However liberal use of tcp_wrappers and
making sure to look over your log files regularly, you should be able
to notice such probes. Even on the lowest setting, Satan still leaves
traces in the logs on a stock Redhat system.
5.4. pgp and public key cryptography
pgp (pretty good privacy) is well supported on linux. versions 2.62
and 5.0 are known to work well. For a good primer on pgp and how to
use it, take a look a the pgp FAQ.
http://www.pgp.com/service/export/faq/55faq.cgi
5.5. ssh and stelnet
ssh (secure shell) and stelnet are programs that allow you to login to
remote systems and have a encrypted connection.
Ssh will prevent host spoofing attacks (It expects a specific key back
from a host it's connected to before), it does compression and X11
forwarding in addition to encrypting all your communications with the
remote machines. This is very good to defeat packet sniffer attacks
(The packet sniffer gets a bunch of encrypted packets). ssh is free
for personal use, so I would recommend you install it and use it if
you are at a personal site. http://www.cs.hut.fi/ssh/
Stelnet is a secure telnet replacement that does encryption over a
telnet connection.
5.6. sendmail, qmail and MTA's.
One of the most important services you can provide is a mail server.
Unfortunately, it is also one of the most vulnerable to attack, simply
due to the number of tasks it must perform and the privileges it
typically needs.
If you are using sendmail it is very important to keep up on current
versions. Sendmail has a long long history of security exploits.
Always make sure you are running the most recent version.
http://www.sendmail.org
If you are tired of upgrading your version of sendmail every week, you
might consider switching over to qmail. qmail was designed with
security in mind from the ground up. It's fast and stable and secure.
http://www.qmail.org
5.7. Denial of service attacks.
A Denial of service attack is one where the attacker tries to make
some resource too busy to answer legitimate requests, or to deny
legitimate users access to your machine.
Denial of service attacks have increased greatly in recent years. Some
of the more popular and recent ones are listed below. Note that new
ones show up all the time, so this is just a few examples. Read the
linux security lists for more current information.
SYN flooding. SYN flooding is a network denial of service attack. It
takes advantage of a "loophole" in the way TCP connections are
created. The newer linux kernels (2.0.30 and up) have several
configurable options to prevent SYN flood attacks from denying people
access to your machine or services. CONFIG_SYN_COOKIES and
CONFIG_RST_COOKIES. Rebuild your kernel with these options to reduce
your susceptibility to SYN flood attacks.
Pentium "F00F" bug. It was recently discovered that a series of
assembly codes send to a genuine Intel Pentium processor would lock
the machine up totally. This affects every machine with a Pentium
processor (not clones, not Pentium Pro or PII), no matter what
operating system it's running. Linux kernel 2.0.32 and up contain a
work around for this bug, preventing it from locking your machine. If
you are running on a pentium, you should upgrade now!
Ping flooding. Ping flooding is a simple brute force denial of service
attack. Your attacker send a "flood" of ICMP packets to your machine.
If they are doing this from a host with better bandwidth than yours,
your machine will be unable to send anything on the network. A
variation on this attack "smurfing" sends ICMP packets to a host with
_your_ machines return IP, allowing them to flood you less detectably.
If you are under a ping flood attack, use a tool like tcpdump to
determine where the packets are coming from (or appear to be coming
from), then contact your provider with this information. Ping floods
can most easily be stopped at the router level.
5.8. NFS (Network File System) security.
NFS is a very widely used file sharing protocol. It allows servers
running nfsd and mountd to "export" entire filesystems to other
machines with nfs filesystem support builtin to their kernels (or some
other client support if they are non linux machines). Mountd keeps
track of mounted filesystems in /etc/mtab, and can display them with
'showmount'.
Many sites use NFS to serve home directories to users, so that no
matter what machine in the cluster they login to, they will have all
their home files.
There is some small amount of "security" allowed in exporting
filesystems. You can make your nfsd map the remote root user (uid=0)
to the nobody user, denying them total access to the files exported.
However, since individual users have access to their own (or at least
the same uid) files, the remote superuser can login or su to their
account and have total access to their files. This is only a small
hindrance to an attacker that has access to mount your remote
filesystems.
If you must use NFS, make sure you export to only those machines that
you really need to export only. Never export your entire root
directory, export only directories you need to export.
See the NFS HOWTO for more information on NFS: NFS HOWTO
5.9. NIS (Network Information service) (formerly YP).
Network Information service (formerly YP) is a means of distributing
information to a group of machines. The NIS master holds the
information tables and converts them into NIS map files. These maps
are then served over the network, allowing NIS client machines to get
login, password, home directory and shell information (all the
information in a standard /etc/passwd file). This allows users to
change their password once and have it take affect on all the machines
in the NIS domain.
NIS is not at all secure. It was never meant to be. It was meant to be
handy and usefull. Anyone that can guess the name of your NIS domain
(anywhere on the net) can get a copy of your passwd file, and use
crack and john the ripper against your users passwords. Also, it is
possible to spoof NIS and do all sorts of nasty tricks. If you must
use NIS, make sure you are aware of the dangers.
There is a much more secure replacement for NIS, called NIS+. Check
out the NIS HOWTO for more information:
http://sunsite.unc.edu/mdw/HOWTO/NIS-HOWTO.html
5.10. Firewalls
Firewalls are a means of restricting what information is allowed into
and out of your local network. Typically the firewall host is
connected to the Internet and your local lan, and the only access from
your lan to the Internet is through the firewall. This way the
firewall can control what passes back and forth from the Internet and
your lan.
There are a number of types and methods of setting up firewalls. Linux
machines make pretty good low cost firewalls. firewall code can be
built right into 2.0 and higher kernels. The ipfwadm user space tool
allows you to change what types of network traffic you allow on the
fly. You can also log particular types of network traffic.
Firewalls are a very usefull and important technique in securing your
network. It is important to realize that you should never think that
because you have a firewall, you don't need to secure the machines
behind it. This is a fatal mistake. Check out the very good Firewall-
HOWTO at your latest sun-site archive for more information on
firewalls and linux. http://sunsite.unc.edu/mdw/HOWTO/Firewall-
HOWTO.html
6. What to do during and after a breakin
So you have followed some of the advice here (or elsewhere) and have
detected a breakin? The first thing to do is to remain calm. Hasty
actions can cause more harm than the attacker would have.
6.1. Security Compromise under way.
Spotting a security compromise under way can be a tense undertaking.
How you react can have large consequences.
If the compromise you are seeing is a physical one, odds are you have
spotted someone who has broken into your home, office or lab. You
should notify your local authorities. In a lab setting you might have
spotted someone trying to open a case or reboot a machine. Depending
on your authority and procedures, you might ask them to stop, or
contact your local security people.
If you have detected a local user trying to compromise your security,
the first thing to do is confirm they are in fact who you think they
are. Check the site they are logging in from. Is it the site they are
normally in from? no? Then use a non electronic means of getting in
touch. For instance call them on the phone or walk over to their
office/house and talk to them. If they agree that they are on, you can
ask them to explain what they were doing or tell them to cease doing
it. If they are not on, and have no idea what you are talking about,
odds are this incident requires further investigation. Look into such
incidents , and have lots of information before making any
accusations.
If you have detected a network compromise, the first thing to do (if
you are able) is to disconnect your network. If they are connected via
modem, unplug the modem cable, if they are connected via ethernet,
unplug the ethernet cable. This will prevent them from doing any
further damage, and they will probably see it as a network problem
rather than detection.
If you are unable to disconnect the network (if you have a busy site,
or you do not have physical control of your machines), the next best
step is to use something like tcp_wrappers or ipfwadm to deny access
from the intruders site.
If you can't deny all people from the same site as the intruder,
locking the users account will have to do. Note that locking an
account is not an easy thing. You have to keep in mind .rhosts files,
FTP access, and a host of backdoors).
After you have done one of the above (disconnected network, denied
access from their site, and/or disabled their account), you need to
kill all their user processes and log them off.
You should monitor your site well for the next few minutes, as the
attacker will try and get back in. Perhaps using a different account,
and/or from a different network address.
6.2. Security Compromise has already happened.
So you have either detected a compromise that has already happened or
you have detected it and locked (hopefully) the offending attacker out
of your system. Now what?
6.2.1. Closing the Hole
If you are able to determine what means the attacker used to get into
your system, you should try and close that hole. For instance, perhaps
you see several FTP entries just before the user logged in. Disable
the FTP service and check and see if there is an updated version or
any of the lists know of a fix.
Check all your log files, and make a visit to your security lists and
pages and see if there are any new common exploits you can fix.
If you don't lock the attacker out, they will likely be back. Not just
back on your machine, but back somewhere on your lan. If they were
running a packet sniffer, odds are good they have access to other
local machines.
6.2.2. Assessing the Damage
The first thing is to assess the damage. What has been compromised?
If you are running an Integrity Checker like Tripwire you can make a
tripwire run and it should tell you. If not, you will have to look
around at all your important data.
Since linux systems are getting easier and easier to install, you
might consider saving off your config files and then wiping your
disk(s) and reinstalling, then restoring your user files from backups
and your config files. This will insure that you have a new clean
system.
6.2.3. Backups, Backups, Backups!
Having regular backups is a godsend for security matters. If your
system is compromised, you can restore the data you need from backups.
Of course some data is valuable to the attacker to, and they will not
only destroy it, they will steal it and have their own copies, but at
least you will still have the data.
You should check several backups back into the past before restoring a
file that has been tampered with. The intruder could have compromised
your files long ago, and you could have made many successful backups
of the compromised file!!!
Of course, there are also a raft of security concerns with backups.
Make sure you are storing them in a secure place. Know who has access
to them. (If an attacker can get your backups, they can have access to
all your data without you ever knowing it.)
6.2.4. Tracking down the intruder.
Ok, you have locked the intruder out, and recovered your system, but
you're not quite done yet. While it is unlikely that most intruders
will ever be caught, you should report the attack.
You should report the attack to the admin contact at the site where
the attacker attacked your system. You can look up this contact with
"whois" or the internic database. You might send them an email with
all applicable log entries and dates and times. If you spotted
anything else distinctive about your intruder, you might mention that
too. After sending the email, you should (if you are so inclined)
follow up with a phone call. If that admin in turn spots your
attacker, they might be able to talk to the admin of the site where
they are coming from and so on.
Good hackers often use many intermediate systems. Some (or many) of
which may not even know they have been compromised. Trying to track a
cracker back to their home system can be difficult. Being polite to
the admins you talk to can go a long way to getting help from them.
You should also notify any security organizations you are a part of
(cert or similar).
7. Security sources
There are a LOT of good sites out there for unix security in general
and linux security specifically. It's very important to subscribe to
one (or more) of the security mailing lists and keep current on
security fixes. Most of these lists are very low volume, and very
informative.
7.1. FTP sites
CERT is the Computer Emergency Response Team. They often send out
alerts of current attacks and fixes. cert.org
Replay has archives of many security programs. Since they are outside
the US, they don't need to obey any silly US crypto restrictions.
replay.com
Matt Blaze is the author of CFS and a great security advocate. Matt
Blaze's stuff
Sorosis is the home of the linux PAM site. They have lots of modules
and information on PAM. Linux PAM ftp site
tue.nl is a great security ftp site in the Netherlands.
ftp.win.tue.nl
7.2. The Hacker FAQ is a FAQ about hackers: The Hacker FAQ web sites
The COAST archive has a large number of unix security programs and
information: COAST
Rootshell.com is a great site for seeing what exploits are currently
being used by crackers: rootshell.com exploits
BUGTRAQ puts out advisories on security issues: BUGTRAQ archives
CERT, the Computer Emergency Response Team, puts out advisories on
common attacks on unix platforms: CERT home
Dan Farmer is the author of SATAN and many other security tools, his
home site has some interesting security survey information as well as
security tools: Dan Farmers trouble.org
The linux security WWW is a good site for linux security information:
Linux Security WWW
Reptile has lots of good linux security information on his site:
Reptiles Linux Security Page
Infilsec has a vulnerability engine that can tell you what
vunerabilities affect a specific platform: Infilsec vunerability
engine
CIAC sends out periodic security bulitins on common exploits: CIAC
bulitins
7.3. mailing lists
Bugtraq: To subscribe to bugtraq, send mail to listserv@netspace.org
containing the message body subscribe bugtraq. (see links above for
archives).
CIAC: Send e-mail to: majordomo@tholia.llnl.gov In the BODY (not
subject) of the message put (either or both): subscribe ciac-bulletin
7.4. Books - printed reading material.
There are a number of good security books out there. This section
lists a few of them. In addition to the security specify books,
security is covered in a number of other books on system
administration.
Building Internet Firewalls By D. Brent Chapman & Elizabeth D. Zwicky
1st Edition September 1995
ISBN: 1-56592-124-0
Practical UNIX & Internet Security, 2nd Edition By Simson Garfinkel &
Gene Spafford
2nd Edition April 1996
ISBN: 1-56592-148-8
Computer Security Basics By Deborah Russell & G.T. Gangemi, Sr.
1st Edition July 1991
ISBN: 0-937175-71-4
Linux Network Administrator's Guide By Olaf Kirch
1st Edition January 1995
ISBN: 1-56592-087-2
PGP: Pretty Good Privacy By Simson Garfinkel
1st Edition December 1994
ISBN: 1-56592-098-8
Computer Crime A Crimefighter's Handbook By David Icove, Karl Seger &
William VonStorch (Consulting Editor Eugene H. Spafford)
1st Edition August 1995
ISBN: 1-56592-086-4
8. Conclusion
By subscribing to the security alert mailing lists, and keeping
current, you can do a lot towards securing your machine. If you pay
attention to your log files and run something like tripwire regularly,
you can do even more.
A reasonable level of computer security is not difficult to maintain
on a home machine. More effort is required on business machines, but
linux can indeed be a secure platform. Due to the nature of linux
development, security fixes often come out much faster than they do on
commercial operating systems, making linux an ideal platform when
security is a requirement.
9. Thanks to
Information here is collected from many sources. Thanks to the
following that either indirectly or directly have contributed:
Rob Riggs <rob@DevilsThumb.com>
S. Coffin <scoffin@netcom.com>
Viktor Przebinda <viktor@CRYSTAL.MATH.ou.edu>
Roelof Osinga <roelof@eboa.com>
Kyle Hasselbacher <kyle@carefree.quux.soltec.net>
"David S. Jackson" <dsj@dsj.net>